import store from '../store'
import {
	refreshToken
} from '../api/login.js';
// 此vm参数为页面的实例，可以通过它引用vuex中的变量
module.exports = (vm) => {
	// 初始化请求配置
	uni.$tn.http.setConfig((config) => {
		/* config 为默认全局配置*/
		// config.baseURL = 'http://192.168.124.26:8891/';
		config.baseURL = 'https://www.wujieaix.com/';
		
		// config.baseURL ='https://ebd.net.cn/';
		return config
	})

	// 请求拦截
	uni.$tn.http.interceptors.request.use((config) => { // 可使用async await 做异步操作
		const tokens = uni.getStorageSync('token');
		if (tokens) {
			config.header.Authorization = 'JWT ' + tokens
		}
		return config
	}, config => { // 可使用async await 做异步操作
		return Promise.reject(config)

	})

	// 响应拦截
	uni.$tn.http.interceptors.response.use(async (response) => {
		/* 对响应成功做点什么 可使用async await 做异步操作*/
		// console.log(response)
		const data = response.data;
		// console.log(data,123)
		uni.showLoading();
		if (data.code === 401) {
			var isRefreshing = false
			var requests = []
			store.commit('removetoken')
			if (uni.getStorageSync('refresh')) {
				// 如果存在 refresh token，并且当前没有正在刷新 token
				if (!isRefreshing) {
					isRefreshing = true
					try {
						// 发起刷新 token 的请求
						const resdata = await refreshToken({
							refresh: uni.getStorageSync('refresh')
						});
						if (resdata.code === 8000) {
							store.commit('logout')
							uni.showToast({
								icon: 'none',
								title: '登录状态已过期',
								duration: 2000
							});
							setTimeout(() => {
								uni.$u.route({
									type: 'redirect',
									url: 'basicPage/login/index',
								});
							}, 300)
							uni.hideLoading();
						}
						// console.log(resdata,'resdata');
						// 刷新成功，更新 token 和 refresh token，并设置到会话中
						uni.setStorageSync('token', resdata.access);
						uni.setStorageSync('refresh', resdata.refresh);

						// 更新请求头中的 token
						response.config.header.Authorization = 'JWT ' + uni.getStorageSync('token');
						// 重新发起等待中的请求
						requests.forEach((cb) => cb(uni.getStorageSync('token')));
						requests = []; // 清空请求队列
						return new Promise(resolve => {
							resolve(uni.$tn.http.request(response.config))
						})
					} catch (error) {
						console.log(error);
						store.commit('logout')
						uni.showToast({
							icon: 'none',
							title: '登录状态已过期',
							duration: 2000
						});
						setTimeout(() => {
							uni.$u.route({
								type: 'redirect',
								url: 'basicPage/login/index',
							});
						}, 300)
						uni.hideLoading();
					}
					isRefreshing = false;
				} else {
					return new Promise(resolve => {
						requests.push(token => {
							response.config.header.token = `${token}`;
							resolve(uni.$tn.http.request(response.config))
						});
					});
				}
			} else {
				store.commit('logout')
				uni.showToast({
					icon: 'none',
					title: '登录状态已过期',
					duration: 2000
				});
				setTimeout(() => {
					uni.$u.route({
						type: 'redirect',
						url: 'basicPage/login/index',
					});
				}, 300)
				uni.hideLoading();
			}

			return;
		} else if (data.code == 1) {
			uni.hideLoading();
		} else if (data.msg === '该用户已存在手机号' || data.msg === '该用户没有手机号') {
			uni.hideLoading();
			return data === undefined ? {} : data
		}
		uni.hideLoading();
		return data === undefined ? {} : data
	}, (response) => {
		// 对响应错误做点什么 （statusCode !== 200）
		uni.hideLoading();
		return Promise.reject(response)
	})
}